package com.atguigu.test04;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.jupiter.api.Test;

import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Properties;

/**
 * @author haoranlu
 * @project IntelliJ IDEA
 *
 * 数据库连接池先准备好一些连接，那么等用户要连接的时候，不用创新的，直接从数据库连接池中拿现成的
 * 当用户用完后，放回池中，给下一个人使用
 *
 * 数据可连接池技术：
 * DBCP
 * c3p0
 * Proxool
 * BoneCP
 * Druid(德鲁伊)
 *
 * 如何使用德鲁伊连接池
 * (1)引入jar
 * (2)方式一
 * (1)手动创建连接池对象,在代码中硬币拿吗配置参数
 * 方式二:
 * (1)在配置文件中写配置参数
 * (2)在代码中用配置文件创建连接池对象
 *
 * 参数:参数名固定，必备参数
 * url:和原来一样
 * username:用户名
 * password:密码
 * driverClassName:驱动类名
 * initialSize:初始化连接数
 * maxActive:最大连接数
 * maxWait:最大等待时间
 * ....
 *
 * (3)获取连接对象
 * 数据库连接池对象.getConnection()
 *
 * （4）用完后close()还回去
 *
 *
 */
public class TestPools {
    @Test
    public void  test03() throws Exception{
        Properties pro = new Properties();
        //TestPools.class得到当前类的对象
        //xx.getClassLoader()通过当前类对象去获得类加载器
        //类加载器对象.getResourceAsStream():加载资源文件，并且把配置文件中的数据封装到Properties对象
        //这个资源文件格式:key=value
        pro.load(TestPools.class.getClassLoader().getResourceAsStream("druid.properties"));
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);

        Connection conn = ds.getConnection();
        System.out.println(conn);
        conn.close();
    }
    @Test
    public void test02() throws Exception {
        DruidDataSource ds = new DruidDataSource();
        ds.setUrl("jdbc:mysql://localhost:3306/test");
        ds.setUsername("root");
        ds.setPassword("123456");
        System.out.println(ds);
    }
    @Test
    public void test01() throws Exception {
        Properties pro = new Properties();
        //特点:key和value都是String
        //硬编码
        pro.setProperty("url","jdbc:mysql://localhost:3306/test");
        pro.setProperty("username","root");
        pro.setProperty("password","123456");

        DataSource ds = DruidDataSourceFactory.createDataSource(pro);
        System.out.println(ds.getClass());
        //运行时类型为class com.alibaba.druid.pool.DruidDataSource
    }
}
